/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.ucue.sep.gestores;

import edu.ucue.sep.controller.PersonaJpaController;
import edu.ucue.sep.controller.UsuarioJpaController;
import edu.ucue.sep.model.Persona;
import edu.ucue.sep.model.Usuario;
import java.io.Serializable;
import java.util.List;
import javax.el.ELContext;
import javax.el.ValueExpression;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

/**
 *
 * @author CHRISTIAN
 */
@ManagedBean(name= "loginManager")
@SessionScoped
public class LoginManager implements Serializable{
    
    private Usuario usuario;
    private Persona persona;
    private UsuarioJpaController usuarioController;
    private PersonaJpaController personaController;
    
    public static LoginManager getInstance() {
        ELContext context = FacesContext.getCurrentInstance().getELContext();
        ValueExpression ex = FacesContext.getCurrentInstance().getApplication().getExpressionFactory().
                createValueExpression(context, "#{loginManager}", LoginManager.class);
        return (LoginManager) ex.getValue(context);
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public Persona getPersona() {
        return persona;
    }

    public void setPersona(Persona persona) {
        this.persona = persona;
    }
    
    public String login() {
        usuarioController=new UsuarioJpaController();
        personaController=new PersonaJpaController();
        boolean val=usuarioController.existeUsuario(usuario.getUsername(), usuario.getPassword());
        if(val){
            List<Usuario> usuarios=usuarioController.findUsuarioEntitiesWhere("where o.username='"+usuario.getUsername()+"' and o.password='"+usuario.getPassword()+"'");
            usuario=usuarios.get(0);
            List<Persona> personas=personaController.findPersonaEntitiesWhere("where o.usuario.idUsuario='"+usuario.getIdUsuario()+"'");
            persona=personas.get(0);
            usuario.setIsLogged(true);
            if (persona.getTipo().equals("empleado")){
                return "index";
            }
            return "indexUsuario";
        }
        else{
           usuario.setIsLogged(false); 
           FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(null, "Usuario o contraseña inválidos"));
           return "";
        }
        
    }
    
    public String logout() {
        usuario = new Usuario();
        return "login";
    }
    
    public static String getUsername() {
        if (!estaLogeado())
            return "";
        return getInstance().getUsuario().getUsername();
    }
    
    public static String getPassword() {
        if (!estaLogeado()) 
            return "";
        return getInstance().getUsuario().getPassword();
    }

    public static boolean estaLogeado() {
        return getInstance().getUsuario().isIsLogged();
    }
}
